import axios from 'axios'
import { Toast } from 'vant'
/* eslint-disable */
// 环境的切换
if (process.env.NODE_ENV == 'development') { 
  axios.defaults.baseURL = '/common'
} else if (process.env.NODE_ENV == 'production') {
  axios.defaults.baseURL = 'http://47.103.5.136:9494'
}
/** 
 * 提示函数 
 * 显示功能
 */
function startLoading() {
  // 开始加载
  Toast.loading({
    message: '加载中...',
    forbidClick: true,
    duration: 500
  });
}

function closeLoading() {
  // 关闭加载
  Toast.clear()
}

function tip (title) {
  Toast(title)
}

/** 
* 请求失败后的错误统一处理 
* @param {Number} status 请求失败的状态码
*/
const errorHandle = (status, other) => {
  // 状态码判断
  switch (status) {
    case 500:
      tip('认证失败,请联系管理员喔~')
      break
    default:
      tip(other)
      break
    }}
// 创建axios实例
var instance = axios.create({ timeout: 1000 * 10 })
/** 
* 请求拦截器 
* 每次请求前，如果存在token则在请求头中携带token 
*/ 
instance.interceptors.request.use(
  config => {
    startLoading()
    // 登录流程控制中，根据本地是否存在token判断用户的登录情况        
    // const token = store.state.token       
    // token && (config.headers.Authorization = token)    
    return config
  },
  error => Promise.error(error))
// 响应拦截器
instance.interceptors.response.use(
  // 请求成功
  res => {
    closeLoading()
    let Res = res.data
    return new Promise(( resolve, reject ) => {
      if (Res.code === 200) {
        resolve(Res)
      } else {
        errorHandle(Res.code, Res.msg)
        // setTimeout(() => {
        //   reject(Res)
        // }, 0)
      }
    })
  },
  // 请求失败
  error => {
      closeLoading()
      const { response } = error
      if (response) {
          // 请求已发出，但是不在2xx的范围 
          errorHandle(response.status, response.data.msg)
          return Promise.reject(response.data)
      } else {
          // 处理断网的情况
          // eg:请求超时或断网时，更新state的network状态
          // network状态在app.vue中控制着一个全局的断网提示组件的显示隐藏
          // 关于断网组件中的刷新重新获取数据，会在断网组件中说明
          console.log("断网")
      }
  })
export function get (url, params) {
  return new Promise((resolve, reject) => {  
    instance.get(url, {
      params: params
    })
    .then(res => {
      resolve(res)
    })
    .catch(err => {
      reject(err)
    })
  })
}
/** 
 * post方法，对应post请求 
 * @param {String} url [请求的url地址] 
 * @param {Object} params [请求时携带的参数] 
 */
  export function post(url, params) {
    return new Promise((resolve, reject) => {
      instance.post(url, params)
      .then(res => {
        resolve(res)
      })
      .catch(err => {
        reject(err)
      })
  })
}
